package top.fwpsl.redis;

/**
 * lua 脚本操作
 * (Redis版本不低于2.6.0)
 *
 * @auther: 风戏fw
 * @date: 2020/11/21
 */
public interface IJedisScriptClient {

    /**
     * 对lua脚本进行求值
     *
     * @param script lua5.1脚本程序
     * @param number args中键名值的数量
     * @param args   其中前number个参数为键名，其它为参数
     * @return
     */
    int eval(String script, int number, Object... args);

    /**
     * 与‘eval’相似，只是脚本缓存到服务器上，通过sha1定位脚本
     *
     * @param sha1
     * @param number
     * @param args
     * @return
     */
    int evalsha(String sha1, int number, Object... args);

    /**
     * 给定一个或多个脚本的 SHA1 校验和，返回一个包含 0 和 1 的列表，表示校验和所指定的脚本是否已经被保存在缓存当中
     *
     * @param sha1s
     * @return 0：不存在于缓存； 1：已存在缓存里
     */
    int[] scriptExists(String... sha1s);

    /**
     * 清除所有 Lua 脚本缓存
     *
     * @return
     */
    boolean scriptFlush();

    /**
     * 杀死当前正在运行的 Lua 脚本，当且仅当这个脚本没有执行过任何写操作时，这个命令才生效。
     * 这个命令主要用于终止运行时间过长的脚本
     *
     * @return
     */
    boolean scriptKill();

    /**
     * 将脚本 script 添加到脚本缓存中; 脚本可以在缓存中保留无限长的时间，直到执行 SCRIPT FLUSH 为止
     *
     * @param script
     * @return 给定 script 的 SHA1 校验和
     */
    String scriptLoad(String script);

}
